run : install #: run one eg (via make This=test 
	@$I; $(if $(findstring $(This),$(Demos)), $A $(This)() $Z; ,$(MAKE) $(This); )

runs : install  #: do all runs
	@$(foreach x, $(Demos) $(Rules), $(MAKE) This=$x run;)

cache : #: run one eg and cache result (via make This=test cache)
	@$(MAKE) run  | tee test/etc/tests/$(This)
	@echo new test result cached to test/etc/$(This)

.PHONY : test
test :  test/etc/tests/$(This) #: test if the cached result is still current
	@$(MAKE) run | tee $(Tmp)/$(This).got 
	@if  diff -s $(Tmp)/$(This).got  test/etc/tests/$(This) > /dev/null;  \
		then echo PASSED $(This) ; \
		else echo FAILED $(This),  got $(Tmp)/$(This).got; \
	fi

caches : install  #: run 'cache' on all egs
	@$(foreach x, $(Demos) $(Rules), $(MAKE) This=$x cache;)

testall : install  #: run 'test' on all egs
	@$(foreach x, $(Demos) $(Rules), $(MAKE) -s This=$x test;) 

score : #: run 'test' on all egs, collect the scores
	@$(MAKE) testall | egrep '(PASSED|FAILED)' 
